/* eslint-disable no-use-before-define */
/*
 * @Author: lirl
 * @Date: 2022-07-18 10:51:05
 * @Description: pc端配置
 */
import { timeConvert, isEmptyStr } from 'jdf-util';
import { map } from 'lodash-es';

/**
 * 基本配置
 */
const base = {
  /**
   * jdf-jssdk存放认证信息的key - 勿动
   */
  sdkAuthKey: 'bff_auth_info',
  /**
   * jdf-jssdk认证信息 - 勿动
   */
  authObj: {
    bffAuthType: 'SESSION',
    authFields: [
      {
        sessionKey: 'biz-access-token',
        requestKey: 'Authorization'
      }
    ]
  },
  /**
   * 请求超时时间
   */
  timeout: 30000,
  // 业务端token放置的key
  bizToke: 'Authorization',
  /**
   * session中BFF存放token的字段名
   */
  bffTokenKey: 'bff-access-token',
  /**
   * session中业务存放token的字段名
   */
  bizTokenKey: 'biz-access-token',
  /**
   * 用户信息存储位置 SESSION/LOCAL
   */
  userStorageLocation: 'SESSION',
  /**
   * token存储位置
   */
  tokenStorageLocation: 'SESSION',
  /**
   * 版权信息
   */
  copyright: 'Copyright@1999- 2022中国移动版权所有，客服电话400-138-1860',
  /**
   * 不用登录限制的路由白名单
   */
  whiteList: ['/wechat-bind', '/wxsso', '/index', '/401', '/404'],
  /**
   * pc端使用的layout, 可选值： sidebar-only/navbar-sidebar/navbar-only
   */
  pcLayout: 'navbar-sidebar',
  /**
   * 富文本组件皮肤文件地址
   */
  tinymceSkinUrl: 'tinymce/skins/ui/oxide',
  /**
   * 外部系统访问本系统时携带的token的key
   */
  accessTokenKey: 'accessToken'
};

/**
 * 流程配置
 */
const process = {
  // 阅文记录展示的列
  readRecordColumns: [
    {
      type: 'index',
      label: '序号',
      width: 80,
      align: 'center'
    },
    {
      label: '姓名',
      width: 130,
      formatter: (row) => row.operateUser.userName
    },
    {
      label: '接收时间',
      formatter: (row) => timeConvert(row.createTime, 'YYYY-MM-DD HH:mm:ss'),
      align: 'center'
    },
    {
      label: '阅文时间',
      formatter: (row) => (row.operateTime ? timeConvert(row.operateTime, 'YYYY-MM-DD HH:mm:ss') : '*'),
      align: 'center'
    }
  ]
};

/**
 * 流程提交组件相关配置
 */
const processSubmitAttrs = {
  /**
   * 弹出框标题
   */
  dialogTitle: '提交意见',
  /**
   * 弹出框宽度
   */
  dialogWidth: '1050px',
  /**
   * 选人控件待办选人树的标题
   */
  candidateTodoTitle: '可选列表',
  /**
   *  选人控件待阅选人树的标题
   */
  candidateToreadTitle: '可选列表',
  /**
   * 待办/待阅选人树是否显示复选框
   */
  candidateShowCheckbox: false,
  /**
   * 常用群组树展开层级是否比候选人树展开层级少一级
   */
  commonGroupTreeExpandLessThanOneLevel: true,
  /**
   * 是否有一键提交
   */
  showOneClickSubmit: true,
  /**
   * 候选人框是否显示穿梭框样式
   */
  transfer: true,
  /**
   * 待办/待阅选人树是否显示搜索框
   */
  candidateSearch: true,
  /**
   * 是否使用ucfg的常用意见功能
   */
  useUcfgCommonOpinion: false,
  /**
   * 提交窗口中显示文档状态的label
   */
  statusShowLabel: '当前处理状态：',
};

/**
 * 流程模板属性
 */
const templateAttrs = {
  /**
   * 是否隐藏常用意见
   */
  isHiddenCommonOpinion: true,
  /**
  * 是否使用常用分组
  */
  candidateCommonGroup: false,
  /**
   * 是否有表单提交
   */
  formSubmit: false,
  /**
   * 流程表单中显示文档状态的label
   */
  nodeNameLabel: '当前处理状态：',
  /**
   * 顶部步骤条
   */
  topStep: false,
  /**
   * 右侧侧边栏
   */
  rightStep: true,
  /**
   * 是否在提交时调用保存操作
   */
  saveOnSubmit: true,
  /**
   * 意见字数限制
   */
  opinionWordLimit: 1000,
  /**
   * 流程跟踪组件的宽度
   */
  processFlowDialogWidth: '1200px',
  /**
   * 流程跟踪组件的标题
   */
  processFlowDialogTitle: '流程跟踪',
  /**
   * 文字超长时是否使用浏览器默认的title，true：是，false: 否
   */
  useBrowserTitle: false,
  /**
   * 是否在打开页面时将待阅转已阅
   */
  readedOnOpen: false,
  /**
   * 是否默认选中第一条路径
   */
  defaultCheckedFirstPath: true,
  /**
   * 是否默认选中第一个决策意见
   */
  defaultCheckedDecisionOpinion: false,
  /**
   * 新建状态是否显示注销按钮
   */
  showRemoveBtnNewly: true,
  /**
   * 流程跟踪是否展示查看流程图按钮
   */
  showViewChartBtn: true,
  /**
   * 流程跟踪是否默认展示流程图
   */
  defaultShowChart: false,
  /**
   * 流程跟踪表格属性
   */
  processTableAttrs: {
    'tooltip-effect': 'light',
    stripe: true,
    border: false,
    size: 'medium',
    maxHeight: 500
  },
  /**
   * 顶部操作按钮属性
   */
  operateButtonAttrs: {
    width: '120px',
    height: '40px',
    type: 'default',
    plain: false,
    fixed: true,
    space: '0'
  },
  /**
   * 流程跟踪展示的列
   */
  processFlowColumns: [
    {
      prop: 'nodeName',
      label: '处理环节',
      width: 180
    },
    {
      label: '处理人',
      width: 130,
      formatter: (row) => {
        const {
          task: { owner, originalOwner }
        } = row;
        if (owner && originalOwner && owner.userId !== originalOwner.userId) {
          return `${owner.userName} 代 ${originalOwner.userName}`;
        }
        return owner?.userName ?? '无';
      },
      class: 'has-event',
      hasEvent: true
    },
    {
      label: '到达时间',
      width: 160,
      formatter: (row) => timeConvert(row.createTime, 'YYYY-MM-DD HH:mm:ss'),
      align: 'center'
    },
    {
      label: '发出时间',
      width: 160,
      formatter: (row) => timeConvert(row.operateTime, 'YYYY-MM-DD HH:mm:ss'),
      align: 'center'
    },
    {
      label: '提交路径',
      prop: 'transitionName',
      width: 180,
      formatter: (row) => row.transitionName || (row.operateTime ? '——' : '未提交')
    },
    {
      label: '后续处理环节',
      prop: 'nextNodeName',
      minWidth: 150,
      formatter: (row) => {
        const nextHandlers = map(row.nextHandlers, 'userName').join('，');
        return [row.nextNodeName, nextHandlers || '无'].filter((v) => !isEmptyStr(v)).join('：');
      }
    }
  ],
};

// 弹窗属性
const dialogAttrs = {
  appendToBody: true,
  lockScroll: false,
  closeOnClickModal: true,
  closeOnPressEscape: true,
  customClass: 'jdf-common-dialog'
};

// 展示的步骤条
const baseSteps = [
  { label: '基本信息', anchor: 'baseInfo', icon: 'iconfont icon-jibenxinxi' },
  { label: '审批意见', anchor: 'opinionInfo', icon: 'iconfont icon-shenpiyijian1' },
  { label: '正文内容', anchor: 'contentInfo', icon: 'iconfont icon-zhengwenneirong' },
  { label: '附件信息', anchor: 'attachInfo', icon: 'iconfont icon-fujianxinxi' },
];

// 稿纸修改记录展示的列
const paperTrackingColumns = [
  {
    label: '处理环节',
    width: '130',
    prop: 'currentStepName'
  },
  {
    label: '处理人',
    width: '130',
    prop: 'userName'
  },
  {
    label: '修改时间',
    width: '180',
    prop: 'updateTime',
    attrs: {
      formatter: (row) => timeConvert(row.updateTime, 'YYYY-MM-DD HH:mm:ss')
    }
  },
  {
    label: '修改字段',
    width: '100',
    prop: 'updateColumn'
  },
  {
    label: '修改前',
    prop: 'beforeDocumentInfo',
    attrs: {
      'show-overflow-tooltip': true
    }
  },
  {
    label: '修改后',
    prop: 'afterDocumentInfo',
    attrs: {
      'show-overflow-tooltip': true
    }
  }
];

// 意见区域配置
const opinionAttrs = {
  // 是否显示“隐藏已阅”
  showHideRead: true,
  // 是否显示“仅本部门意见”
  showFilterDept: false,
  // 是否记住用户选择的“隐藏已阅”和“仅本部门意见”
  rememberCheck: false,
  /*
     当rememberCheck为true时，此属性生效。
     当此属性为true时，会通过配置服务来保存用户对“隐藏已阅”和 “仅本部门意见”的勾选状态，当用户切换客户端或浏览器后，都能回显上次的勾选状态；
     当此属性为false时，会将用户的勾选状态存储到浏览器的localStorage中，用户切换客户端或浏览器后，不会回显上次的勾选状态
  */
  rememberCheckByApi: false
};

// 是否默认隐藏发送跟踪窗口中的“查看日志”按钮
const defaultHideRecieveLogBtn = false;

export default {
  ...base,
  paperTrackingColumns,
  process,
  processSubmitAttrs,
  templateAttrs,
  dialogAttrs,
  baseSteps,
  opinionAttrs,
  defaultHideRecieveLogBtn
};
